from individual import Individual
from random import sample

class Population:
    def __init__(self, individuals):
        self.individuals = individuals # Indivíduos da população: Atributo único compondo a classe Population.

    """
    Gera indivíduos dentro da população.
    """
    @staticmethod
    def gen_individuals(sz, genes):
        individuals = []
        for _ in range(sz):
            individuals.append(Individual(sample(genes, len(genes))))
        return Population(individuals)

    """
    Adiciona um indivíduo à população.
    """
    def add(self, route):
        self.individuals.append(route)

    """
    Remove um indivíduo da população.
    """
    def rmv(self, route):
        self.individuals.remove(route)
    
    """
    Percorre a população em busca do indivíduo mais apto.
    """
    def get_fittest(self):
        fittest = self.individuals[0]
        for route in self.individuals:
            if route.fitness > fittest.fitness:
                fittest = route
        return fittest
